package com.dimples.dd.web.core.util;

import cn.hutool.core.convert.Convert;
import com.dimples.dd.common.context.RequestContextHolder;
import com.dimples.dd.common.enums.UserTypeEnum;
import jakarta.servlet.http.HttpServletRequest;

/**
 * @author zhongyj <1126834403@qq.com><br/>
 * @date 2024/7/2
 */
public class WebFrameworkUtils {

    private static final String REQUEST_ATTRIBUTE_LOGIN_USER_ID = "login-user-id";

    private static final String REQUEST_ATTRIBUTE_LOGIN_USER_TYPE = "login-user-type";

    /**
     * 获得当前用户的编号，从请求中
     * 注意：该方法仅限于 framework 框架使用！！！
     *
     * @return 用户编号
     */
    public static Long getLoginUserId() {
        String loginUserId = RequestContextHolder.get(REQUEST_ATTRIBUTE_LOGIN_USER_ID);
        return Convert.toLong(loginUserId);
    }

    /**
     * 获得当前用户的类型
     * 注意：该方法仅限于 web 相关的 framework 组件使用！！！
     *
     * @param request 请求
     * @return 用户编号
     */
    public static Integer getLoginUserType(HttpServletRequest request) {
        if (request == null) {
            return null;
        }
        // 1. 优先，从 Attribute 中获取
        Integer userType = (Integer) request.getAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_TYPE);
        if (userType != null) {
            return userType;
        }
        // 2. 其次，基于 URL 前缀的约定
        if (request.getServletPath().startsWith("/admin-api")) {
            return UserTypeEnum.ADMIN.getValue();
        }
        if (request.getServletPath().startsWith("/app-api")) {
            return UserTypeEnum.MEMBER.getValue();
        }
        // todo: 暂时默认数据，后续完善
        return UserTypeEnum.ADMIN.getValue();
    }

}
